/*
 * TacticaAna.java
 *
 * Created on 17 de julio de 2006, 22:26
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package futbol.tacticas.concursantes2007.PaulNPlay;

import futbol.General;
import futbol.tacticas.concursantes.Tactica;

import java.awt.*;
import java.util.Vector;
import futbol.tacticas.*;

/**
 * 
 * @author Administrador
 */
public class TacticaPaulNPlay implements Tactica {

	private int nValores[][] = { { -150, 0, 7 }, // Jugador 1[0]
			{ -104, -22, 7 }, // Jugador 2[1]
			{ -100, 0, 7 }, // Jugador 3[2]
			{ -104, 22, 7 }, // Jugador 4[3]
			{ -44, -47, 5 }, // Jugador 5[4]
			{ -70, 0, 5 }, // Jugador 6[5]
			{ -44, 47, 5 }, // Jugador 7[6]
			{ 57, 38, 7 }, // Jugador 8[7]
			{ 0, 0, 4 }, // Jugador 9[8]
			{ 57, -38, 7 }, // Jugador 10[9]
			{ 109, 0, 7 } // Jugador 11[10]
	};

	public Color getColor1() {
		return Color.blue;
	}

	public Color getColor2() {
		return Color.white;
	}

	public Color getColorNumero() {
		return Color.black;
	}

	public String getNombre() {
		return "PaulNPlay";
	}

	public int getXInicial(int n) {
		return nValores[n][0];
	}

	public int getYInicial(int n) {
		return nValores[n][1];
	}

	public int getFuerza(int n) {
		return nValores[n][2];
	}

	public Vector<Comando> getComandos(SituacionJugadores sj) {
		Vector<Comando> com = new Vector<Comando>();
		// Posicionamiento
		for (int n = 0; n < 11; n++)
			com.add(new ComandoIrA(n, nValores[n][0], nValores[n][1]));

		Point bola = sj.getBola();
		Point jugadores[] = sj.getMisJugadores();
		
		// Portero
		Point destino = mueveCirculo(30, 0, bola);
		com.add(new ComandoIrA(0, nValores[0][0], destino.getY()));

		// Si la pelota est en nuestro campo, movemos la defensa
		if (bola.getX() < 0) {
			// Defensa
			Point destino3 = mueveCirculo(60, 45, bola);
			com.add(new ComandoIrA(3, destino3.getX(), destino3.getY()));

			Point destino2 = mueveCirculo(60, 0, bola);
			com.add(new ComandoIrA(2, destino2.getX(), destino2.getY()));

			Point destino1 = mueveCirculo(60, -45, bola);
			com.add(new ComandoIrA(1, destino1.getX(), destino1.getY()));
		}

		// A por la bola
		
			int mJMC = sj.getMiJugadorMasCerca(bola.getX(), bola.getY());
			int[] excluir = {mJMC};
			int[] dev=sj.getInfoMasCercano(jugadores, bola, excluir, false);
			int mJMC2 = dev[0];
			com.add(new ComandoIrA(mJMC, bola.getX(), bola.getY()));
			if (mJMC2 > 0 && !sj.estoyMasCercaDeBola())
				com.add(new ComandoIrA(mJMC2, bola.getX(), bola.getY()));

			//Central
			if (!sj.estoyMasCercaDeBola())
				com.add(new ComandoIrA(8,bola.getX(),bola.getY()));

	        for (int n=0;n<11;n++)
	        	if (n==8){
	        		int i = sj.getSiguienteJugador(8);
	        		if (i>0)
	        		    com.add(new ComandoPase(n,i));
	        		else
	        			com.add(new ComandoTiroAPuerta(n,0));
	        	}
	        		
	        	else if (n>3)
	        		com.add(new ComandoTiroAPuerta(n,0));
	        	else
	        		com.add(new ComandoPase(n,5));
	        	
		return com;
	}

	private Point mueveCirculo(int distancia, int grados, Point bola) {
		double m = General.getAngulo(-160, 0, bola.getX(), bola.getY());
		// Pasamos los grados a radianes
		m = m + grados * Math.PI / 360;
		int defensaX = (int) (-160 + distancia * Math.cos(m));
		int defensaY = (int) (distancia * Math.sin(m));
		if (defensaX < -155)
			defensaX = -155;
		if (defensaY < -120)
			defensaY = -120;
		if (defensaY > 120)
			defensaY = 120;
		return new Point(defensaX, defensaY);
	}
}
